package com.tianqi.modules.pms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tianqi.modules.pms.dto.request.Lv2CodeRequestDTO;
import com.tianqi.modules.pms.dto.response.Lv2CodeResponseDTO;
import com.tianqi.modules.pms.dto.response.PmsLv2CodeDTO;
import com.tianqi.modules.pms.mapper.PmsLv2CodeMapper;
import com.tianqi.modules.pms.model.PmsLv2Code;
import com.tianqi.modules.pms.service.PmsLv2CodeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author rory
 * @since 2022-11-28
 */
@Service
public class PmsLv2CodeServiceImpl extends ServiceImpl<PmsLv2CodeMapper, PmsLv2Code> implements PmsLv2CodeService {

	@Resource
	private PmsLv2CodeMapper pmsLv2CodeMapper;

	/**
	 * 根据类型查询二级代码的值
	 *
	 * @param lv2CodeRequestDTO
	 * @return {@link Lv2CodeResponseDTO}
	 * @author zhangzedi
	 * @date 2022/11/28 23:26
	 */
	@Override
	public List<Lv2CodeResponseDTO> queryLv2CodeByType(Lv2CodeRequestDTO lv2CodeRequestDTO) {
		QueryWrapper<PmsLv2Code> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("type",lv2CodeRequestDTO.getType());
		queryWrapper.eq("status","1");
		List<PmsLv2Code> result = pmsLv2CodeMapper.selectList(queryWrapper);

		//根据首字母缩写分组
		Map<String,List<PmsLv2Code>> listMap =
				result.stream().collect(Collectors.groupingBy(PmsLv2Code::getDescription));
		List<Lv2CodeResponseDTO> lv2CodeResponseDTOList = new ArrayList<>();
		Set<String> keys = listMap.keySet();
		for(String key: keys){
			//生成新的list
			List<PmsLv2CodeDTO> pmsLv2CodeDTOList = new ArrayList<>();
			List<PmsLv2Code> keyList = listMap.get(key);
			for(PmsLv2Code item : keyList){
				PmsLv2CodeDTO pmsLv2CodeDTO = new PmsLv2CodeDTO();
				pmsLv2CodeDTO.setCode(item.getValue());
				pmsLv2CodeDTO.setName(item.getName());
				pmsLv2CodeDTO.setUrl(item.getUrl());
				pmsLv2CodeDTOList.add(pmsLv2CodeDTO);
			}
			Lv2CodeResponseDTO lv2CodeResponseDTO = new Lv2CodeResponseDTO();
			lv2CodeResponseDTO.setName(key);
			lv2CodeResponseDTO.setList(pmsLv2CodeDTOList);
			lv2CodeResponseDTOList.add(lv2CodeResponseDTO);
		}
		return lv2CodeResponseDTOList;
	}

	/**
	 * 查询所有地区代码
	 *
	 * @param lv2CodeRequestDTO
	 * @return {@link List< PmsLv2Code>}
	 * @author zhangzedi
	 * @date 2022/12/28 23:56
	 */
	@Override
	public List<PmsLv2Code> queryAreaCode(Lv2CodeRequestDTO lv2CodeRequestDTO) {
		QueryWrapper<PmsLv2Code> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("type", lv2CodeRequestDTO.getType());
		queryWrapper.eq("status", "1");
		return pmsLv2CodeMapper.selectList(queryWrapper);
	}
}
